#ifndef _PROTOCOL_H_
#define _PROTOCOL_H_

#include "Global.h"

typedef struct 
{
    uint8 reversed:4;
    uint8 type:4;
    uint8 RollingCode[3];
}Typedef_MESSAGE1;

typedef struct
{
    // A1
    uint8 UserCode;         //---- 用户码
    
    // D1
    uint8 KeyCode;          //---- 按键码

    // D2
    uint8 WindTemp:4;       //---- 风温档位
    uint8 WaterTemp:4;      //---- 水温档位

    // D3
    uint8 Hydraulic:4;      //---- 水压档位
    uint8 SeatTemp:4;       //---- 座温档位

    // D4
    uint8 WaterLevel:2;     //---- 陶瓷冲水档位
    uint8 WindSpeed:2;      //---- 风速档位
    uint8 CleanPos:4;       //---- 清洗位置

    // D5
    uint8 Reversed:1;
    uint8 CtrlSource:1;     //---- 控制源：0-遥控按键  1-语音模块
    uint8 FuncSpecif:2;     //---- 功能指定开关：0-关  1-开
    uint8 MicWaveLevel:4;   //---- 微波档位

    // D6
    uint8 ReversedD6B0:1;   //---- 预留
    uint8 AutoChuChou:1;    //---- 自动除臭
    uint8 AutoFanGai:1;     //---- 自动翻盖
    uint8 AutoFanQuan:1;    //---- 自动翻圈
    uint8 AutoMicWave:1;    //---- 自动微波
    uint8 AutoShaJunShui:1; //---- 自动杀菌水
    uint8 AutoPaoMo:1;      //---- 自动泡沫
    uint8 AutoChongShui:1;  //---- 自动冲水

    // D7
    uint8 PaoMoDunLevel:2;  //---- 泡沫盾档位
    uint8 ReversedData7:2;  //
    uint8 GanYingDeng:4;    //---- 感应氛围灯
}Typedef_MESSAGE2;


typedef struct 
{
    Typedef_MESSAGE1    Msg1;
    Typedef_MESSAGE2    Msg2;
    uint8 CheckSum;
}Typedef_Pack;

typedef union 
{
    Typedef_Pack Detail;
    uint8 Buf[sizeof(Typedef_Pack)];
}U_Pack;


enum
{
    TYPE_SELF_GENER_ELEC_REMOTER1 = 0,   // �Է���ң����1
    TYPE_SELF_GENER_ELEC_REMOTER2,       // �Է���ң����2
    TYPE_SELF_GENER_ELEC_REMOTER3,       // �Է���ң����3
    TYPE_SELF_GENER_ELEC_REMOTER4,       // �Է���ң����4
    TYPE_SELF_GENER_ELEC_REMOTER5,       // �Է���ң����5
    TYPE_SELF_GENER_ELEC_REMOTER6,       // �Է���ң����6
    TYPE_SELF_GENER_ELEC_REMOTER7,       // �Է���ң����7
    TYPE_SELF_GENER_ELEC_REMOTER8,       // �Է���ң����8
    TYPE_SELF_GENER_ELEC_REMOTER9,       // �Է���ң����9
    TYPE_SELF_GENER_ELEC_REMOTERA,       // �Է���ң����10
    TYPE_SELF_GENER_ELEC_REMOTERB,       // �Է���ң����11
    TYPE_SELF_GENER_ELEC_REMOTERC,       // �Է���ң����12
    TYPE_SELF_GENER_ELEC_REMOTERD,       // �Է���ң����13
    TYPE_SELF_GENER_ELEC_REMOTERE,       // �Է���ң����14
    TYPE_BAT_REMOTER = 0x0F              // ���ң���ￄ1�7
};


#define C_DEFAULT_USER_CODE     0xAA

#define SIZE_OF_PACK    sizeof(Typedef_Pack)

extern U_Pack    Msg;

void    initProtocol(void);
void    SendCommand(uint8 keyCode);
u8      Radio_Send_FixedLen(const u8 pBuf[], u8 len);
// u8    CalcCheckSum(u8* buf, u8 len);
u8    CalcCheckSum(u8* buf, u8 len, u8 initValue);

#endif